RestTemplate调用第三方接口报错:No instances avaliable for ip

前言

遇到的坑: restTemplate 调用外部接口 ,一直报错; No instances avaliable for ip地址

分析原因

在启动类的时候添加了

@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}

我使用这个bean去调用第三方接口, 重点在这里, restTemplate加上负载均衡注解后,就会去注册中心寻找服务. 因为是第三方的服务,所以当然报找不到实例;

解决办法

第三方调用

重新注入一个restTemplate bean; 修改名称,然后获取这个restTemplate去调用第三方接口

@Bean(name="RestTemplate2") //不加负载均衡
public RestTemplate restTemplateRemote() {
return new RestTemplate();
}

调用的类里面

@Autowired
@Qualifier(value = "RestTemplate2")
private RestTemplate restTemplate;

@GetMapping("/test")
public String testRest(){
String url = "https://xxxx.xxxx.xxx.cn/xxxxx/student";
String studentCode = "0238a55e-2e5c-4866-bf79-xxxxxxxx8888@123456";

HttpHeaders headers = new HttpHeaders();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
//接口参数
map.add("studentCode",studentCode);
//头部类型
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
//构造实体对象
HttpEntity<MultiValueMap<String, Object>> param = new HttpEntity<>(map, headers);
System.out.println("testRest start");
String msg = restTemplate.postForObject(url, param,String.class);
System.out.println(msg);
return "成功";
}

普通调用

@LoadBalanced
@Bean(name="RestTemplate")
public RestTemplate restTemplateRemote() {
return new RestTemplate();
}

同一个nacos实例互相调用

@RequestMapping("/add")
public String add(){
System.out.println("下单成功");
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
return msg;
}